package com.wenyang.utils;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.http.HttpStatus;

@Data
@ApiModel("数据接口响应-视图模型")
public class R<T> {

    /**
     * 状态编码
     */
    @ApiModelProperty("状态编码")
    private int code;


    @ApiModelProperty("请求信息")
    private String msg;


    @ApiModelProperty("返回数据")
    private T data;


    public R(int code, String msg, T data) {
        this(code, msg);
        this.data = data;
    }


    public R(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }



    public R(T data,String msg) {
        this(HttpStatus.OK.value(),msg,data);
    }



    /**
     * 请求成功
     * @param data 数据
     * @param msg 请求信息
     */
    public static <T> R success(T data,String msg) {
        return new R(data,msg);
    }

    /**
     * 请求成功
     * @param data 数据
     * @param <T> 请求信息
     */
    public static <T> R success(T data) {
        return success(data,"请求成功");
    }

    /**
     * 请求成功，自定义请求信息
     * @param msg 请求信息
     */
    public static R success(String msg) {
        return new R(null,msg);
    }

    /**
     * 请求成功
     * @param result 验证表达式
     * @param msg 成功信息
     * @return
     */
    public static R success(Boolean result,String msg) {
        return result ? success(msg) : error();
    }

    /**
     * 添加接口响应结果
     * @param result 添加状态
     */
    public static R addResult(Boolean result) {
        return  result ? success("添加成功") : error("添加失败,请稍后重试");
    }

    /**
     * 添加接口响应结果
     * @param result 添加状态
     * @param msg 自定义信息
     */
    public static R addResult(Boolean result,String msg) {
        return  result ? success(msg) : error();
    }

    /**
     * 修改接口响应结果
     * @param result 修改状态
     */
    public static R updateResult(Boolean result) {
        return result ?  success("修改成功") : error("修改失败,请稍后重试");
    }

    /**
     * 修改接口响应结果
     * @param result 修改状态
     * @param msg 自定义信息
     */
    public static R updateResult(Boolean result,String msg) {
        return result ?  success(msg) : error();
    }

    /**
     * 删除接口响应结果
     * @param result 删除状态
     */
    public static R delResult(Boolean result) {
        return result ? success("删除成功") : error("删除失败,请稍后重试");
    }

    /**
     * 删除接口响应结果
     * @param result 删除状态
     * @param msg 自定义信息
     */
    public static R delResult(Boolean result,String msg) {
        return result ? success(msg) : error();
    }


    /**
     * 请求异常-自定义信息
     * @param status 异常状态
     * @param msg 异常信息
     */
    public static R error(HttpStatus status, String msg) {
        return error (status.value(), msg);
    }


    /**
     * 请求异常-自定义信息
     * @param code 异常编码
     * @param msg 异常信息
     */
    public static R error(int code,String msg) {
        return new R (code, msg);
    }

    /**
     * 请求异常 -自定义提示信息
     * @param msg 异常信息
     */
    public static R error(String msg) {
        return error(HttpStatus.INTERNAL_SERVER_ERROR, msg);
    }

    /**
     * 请求异常
     * @return 固定异常信息
     */
    public static R error() {
        return error("系统异常，请联系管理员!");
    }

}
